
package com.google.api.ads.adwords.jaxws.v201209.info;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import com.google.api.ads.adwords.jaxws.v201209.cm.DateRange;
import com.google.api.ads.adwords.jaxws.v201209.cm.Operator;


/**
 * 
 *             Specifies the type of API usage information to be returned. API usage information
 *             returned is based on the {@link #apiUsageType API usage type} specified. All returned
 *             values are specific to the developer token being used to call <code>InfoService.get</code>.
 *             
 *             <p>For each of the <code>apiUsageType</code> values, other <code>InfoSelector</code>
 *             fields must also be set as described below:</p>
 *             
 *             <ul>
 *             <li><code>FREE_USAGE_API_UNITS_PER_MONTH</code> : Returns the number of allocated
 *             <a href="http://www.google.com/support/adwordsapi/bin/answer.py?answer=45891">
 *             free API units</a> for this entire month. Specify only the apiUsageType parameter.</li>
 *             <li><code>TOTAL_USAGE_API_UNITS_PER_MONTH</code> : Returns the total number of allocated API
 *             units for this entire month. Includes both free and paid API units. Specify only the
 *             apiUsageType parameter.</li>
 *             <li><code>OPERATION_COUNT</code> : Returns the number of operations recorded over the given
 *             date range. The given dates are inclusive; to get the operation count for a single day,
 *             supply it as both the start and end date. Specify the apiUsageType and
 *             dateRange parameters. </li>
 *             <li><code>UNIT_COUNT</code> : Returns the number of API units recorded.
 *             <ul>
 *             <li>Specify the apiUsageType and dateRange parameters to retrieve
 *             the units recorded over the given date range.</li>
 *             <li>Specify the apiUsageType, serviceName, methodName and dateRange to
 *             retrieve the units recorded over the given date range for a specified method.</li>
 *             </ul>
 *             </li>
 *             <li><code>UNIT_COUNT_FOR_CLIENTS</code> :  Returns the number of API units recorded for a
 *             subset of clients over the given date range. The given dates are inclusive; to get
 *             the unit count for a single day, supply it as both the start and end date. Specify the
 *             apiUsageType, dateRange and clientEmails parameters.</li>
 *             <li><code>METHOD_COST</code> : Returns the cost, in API units per operation, of the given
 *             method on a specific date. Methods default to a cost of 1. Specify the apiUsageType,
 *             dateRange (start date and end date should be the same), serviceName, methodName,
 *             operator parameters.</li>
 *             </ul>
 *           
 * 
 * <p>Java class for InfoSelector complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="InfoSelector">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="serviceName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="methodName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="operator" type="{https://adwords.google.com/api/adwords/cm/v201209}Operator" minOccurs="0"/>
 *         &lt;element name="dateRange" type="{https://adwords.google.com/api/adwords/cm/v201209}DateRange" minOccurs="0"/>
 *         &lt;element name="clientEmails" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="clientCustomerIds" type="{http://www.w3.org/2001/XMLSchema}long" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="includeSubAccounts" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
 *         &lt;element name="apiUsageType" type="{https://adwords.google.com/api/adwords/info/v201209}ApiUsageType" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "InfoSelector", propOrder = {
    "serviceName",
    "methodName",
    "operator",
    "dateRange",
    "clientEmails",
    "clientCustomerIds",
    "includeSubAccounts",
    "apiUsageType"
})
public class InfoSelector {

    protected String serviceName;
    protected String methodName;
    protected Operator operator;
    protected DateRange dateRange;
    protected List<String> clientEmails;
    @XmlElement(type = Long.class)
    protected List<Long> clientCustomerIds;
    protected Boolean includeSubAccounts;
    protected ApiUsageType apiUsageType;

    /**
     * Gets the value of the serviceName property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getServiceName() {
        return serviceName;
    }

    /**
     * Sets the value of the serviceName property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setServiceName(String value) {
        this.serviceName = value;
    }

    /**
     * Gets the value of the methodName property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getMethodName() {
        return methodName;
    }

    /**
     * Sets the value of the methodName property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setMethodName(String value) {
        this.methodName = value;
    }

    /**
     * Gets the value of the operator property.
     * 
     * @return
     *     possible object is
     *     {@link Operator }
     *     
     */
    public Operator getOperator() {
        return operator;
    }

    /**
     * Sets the value of the operator property.
     * 
     * @param value
     *     allowed object is
     *     {@link Operator }
     *     
     */
    public void setOperator(Operator value) {
        this.operator = value;
    }

    /**
     * Gets the value of the dateRange property.
     * 
     * @return
     *     possible object is
     *     {@link DateRange }
     *     
     */
    public DateRange getDateRange() {
        return dateRange;
    }

    /**
     * Sets the value of the dateRange property.
     * 
     * @param value
     *     allowed object is
     *     {@link DateRange }
     *     
     */
    public void setDateRange(DateRange value) {
        this.dateRange = value;
    }

    /**
     * Gets the value of the clientEmails property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the clientEmails property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getClientEmails().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getClientEmails() {
        if (clientEmails == null) {
            clientEmails = new ArrayList<String>();
        }
        return this.clientEmails;
    }

    /**
     * Gets the value of the clientCustomerIds property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the clientCustomerIds property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getClientCustomerIds().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link Long }
     * 
     * 
     */
    public List<Long> getClientCustomerIds() {
        if (clientCustomerIds == null) {
            clientCustomerIds = new ArrayList<Long>();
        }
        return this.clientCustomerIds;
    }

    /**
     * Gets the value of the includeSubAccounts property.
     * 
     * @return
     *     possible object is
     *     {@link Boolean }
     *     
     */
    public Boolean isIncludeSubAccounts() {
        return includeSubAccounts;
    }

    /**
     * Sets the value of the includeSubAccounts property.
     * 
     * @param value
     *     allowed object is
     *     {@link Boolean }
     *     
     */
    public void setIncludeSubAccounts(Boolean value) {
        this.includeSubAccounts = value;
    }

    /**
     * Gets the value of the apiUsageType property.
     * 
     * @return
     *     possible object is
     *     {@link ApiUsageType }
     *     
     */
    public ApiUsageType getApiUsageType() {
        return apiUsageType;
    }

    /**
     * Sets the value of the apiUsageType property.
     * 
     * @param value
     *     allowed object is
     *     {@link ApiUsageType }
     *     
     */
    public void setApiUsageType(ApiUsageType value) {
        this.apiUsageType = value;
    }

}
